"""
Python中的所有内置数据类型包括：

1. 数字类型（Numeric Types）：
   - 整数（int）：表示整数值，例如 42。
   - 浮点数（float）：表示带有小数部分的数字，例如 3.14。
   - 复数（complex）：表示实部和虚部构成的复数，例如 3+2j。

2. 字符串类型（String Type）：
   - 字符串（str）：用于表示文本数据，例如 "Hello, World!"。

3. 序列类型（Sequence Types）：
   - 列表（list）：有序、可变的序列，可以包含不同类型的元素。
   - 元组（tuple）：有序、不可变的序列，可以包含不同类型的元素。
   - 字节串（bytes）：不可变的字节序列。

4. 集合类型（Set Types）：
   - 集合（set）：无序、唯一元素组成的集合。
   - 冻结集合（frozenset）：不可变的集合。

5. 映射类型（Mapping Type）：
   - 字典（dict）：键值对映射的数据结构，用于存储和访问具有唯一键的值。

6. 布尔类型（Boolean Type）：
   - 布尔值（bool）：表示真或假，只能取两个值 True 或 False。

7. 空值类型（NoneType）：
   - None：表示空值或缺失值。

以上是 Python 中常见且核心的数据类型。此外，在使用 Python 还可以扩展自定义数据类型，如类和对象等

不可变数据（3 个）：Number（数字）、String（字符串）、Tuple（元组）

可变数据（3 个）：List（列表）、Dictionary（字典）、Set（集合）
"""

print("------------------------------查看数据类型----------------------------")
# 在Python 3里，只有一种整数类型 int，表示为长整型，没有 python2 中的 Long

# 1.内置的 type() 函数可以用来查询变量所指的对象类型
a, b, c, d = 20, 5.5, True, 4 + 3j

print(type(a), type(b), type(c), type(d))  # <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

# 2.type()函数查看字面量的数据类型
print(type(123))  # <class 'int'>
print(type("hello 世界"))  # <class 'str'>

# 3.变量存储type()函数的结果
int_type = type(a)
print(int_type)  # <class 'int'>

# 4.可以使用isinstance来判断返回bool值
a = 111
result = isinstance(a, int)
print(result)  # True

"""
变量是没有类型的，变量存储的数据有类型
type(变量名)，得到的是变量中存储的变量值的类型
"""

"""
比较：isinstance(a,Type)和type()的区别在于：
type()不会认为子类是一种父类类型
isinstance()会认为子类是一种父类类型
"""


class A:
    pass


class B(A):
    pass


var = isinstance(A(), A)
print(var)  # True
var = type(A()) == A
print(var)  # 判断A()的类型是否为A True
var = isinstance(B(), A)
print(var)  # 判断B()是否是A类型 True
var = type(B()) == A
print(var)  # 判断B()的类型是否为A False


print("------------------------------数据类型转换----------------------------")

# 将数字类型转换为字符串
num_str = str(11)
print(type(num_str), num_str)

float_str = str(11.345)
print(type(float_str), float_str)

# 将字符串类型转换为数字
num = int("11")  # 字符串内容必需全是数字，否则报错
print(type(num), num)

num2 = float("11.345")
print(type(num2), num2)

# 整数转浮点数
float_num = float(11)
print(type(float_num), float_num)

# 浮点数转整数
int_num = int(11.345)  # 浮点数转整数，可能会丢失精度，小数部分
print(type(int_num), int_num)  # <class 'int'> 11
